Merge pull request #1423 from Jngai/queuedjobpatch

retry queued job patch

Andrew Cantino 8 years ago
parent
commit
35bbd2a492

+ 9 - 0
app/controllers/jobs_controller.rb

@@ -39,6 +39,15 @@ class JobsController < ApplicationController
39 39
     end
40 40
   end
41 41
 
42
+  def retry_queued
43
+    @jobs = Delayed::Job.awaiting_retry.update_all(run_at: Time.zone.now)
44
+    
45
+    respond_to do |format|
46
+      format.html { redirect_to jobs_path, notice: "Queued jobs getting retried." }
47
+      format.json { head :no_content }
48
+    end
49
+  end
50
+
42 51
   def destroy_failed
43 52
     Delayed::Job.where.not(failed_at: nil).delete_all
44 53
 

+ 4 - 0
app/views/jobs/index.html.erb

@@ -80,6 +80,10 @@
80 80
           <span class="glyphicon glyphicon-trash"></span> Remove failed jobs
81 81
         <% end %>
82 82
 
83
+        <%= link_to retry_queued_jobs_path, class: "btn btn-default", method: :post do %>
84
+          <span class="glyphicon glyphicon-refresh"></span> Retry queued jobs
85
+        <% end %>
86
+
83 87
         <%= link_to destroy_all_jobs_path, class: "btn btn-default", method: :delete, data: { confirm: "Are you sure you want to delete ALL pending jobs for all Huginn users?" } do %>
84 88
           <span class="glyphicon glyphicon-remove"></span> Remove all jobs
85 89
         <% end %>

+ 1 - 1
config/initializers/delayed_job.rb

@@ -12,7 +12,7 @@ Delayed::Worker.logger = Rails.logger
12 12
 
13 13
 class Delayed::Job
14 14
   scope :pending, ->{ where("locked_at IS NULL AND attempts = 0") }
15
-  scope :awaiting_retry, ->{ where("failed_at IS NULL AND attempts > 0") }
15
+  scope :awaiting_retry, ->{ where("failed_at IS NULL AND attempts > 0 AND locked_at IS NULL") }
16 16
   scope :failed, -> { where("failed_at IS NOT NULL") }
17 17
 end
18 18
 

+ 1 - 0
config/routes.rb

@@ -63,6 +63,7 @@ Huginn::Application.routes.draw do
63 63
     collection do
64 64
       delete :destroy_failed
65 65
       delete :destroy_all
66
+      post :retry_queued
66 67
     end
67 68
   end
68 69
 

+ 14 - 0
spec/controllers/jobs_controller_spec.rb

@@ -92,4 +92,18 @@ describe JobsController do
92 92
       expect(Delayed::Job.find(@running.id)).to be
93 93
     end
94 94
   end
95
+
96
+  describe "POST retry_queued" do
97
+    before do
98
+      @not_running = Delayed::Job.create(run_at: Time.zone.now - 1.hour)
99
+      @not_running.update_attribute(:attempts, 1)
100
+      sign_in users(:jane)
101
+    end
102
+
103
+    it "run the queued job" do
104
+      expect(Delayed::Job.last.run_at.to_s).not_to eq(Time.zone.now.to_s)
105
+      post :retry_queued
106
+      expect(Delayed::Job.last.run_at.to_s).to eq(Time.zone.now.to_s)
107
+    end
108
+  end
95 109
 end